// 在一个由小写字母构成的字符串 s 中，包含由一些连续的相同字符所构成的分组。
// 例如，在字符串 s = "abbxxxxzyy" 中，就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
// 分组可以用区间 [start, end] 表示，其中 start 和 end 分别表示该分组的起始和终止位置的下标。
// 上例中的 "xxxx" 分组用区间表示为 [3,6] 。

// 我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
// 找到每一个 较大分组 的区间，按起始位置下标递增顺序排序后，返回结果。

const largeGroupPositions = function (s: string): number[][] {
    let lastStr: string = ''; // 之前遍历到的字符
    let currCount: number = 0; // 当前计数变量
    const res: number[][] = []; // 结果数组
    for (let i = 0; i < s.length; i++) {
        if (s[i] === lastStr) { // 如果当前字符与之前遍历的字符相同就增加计数
            currCount++;
        } else {
            // 如果计数大于3需要将当前结果先加入结果数组
            if (currCount >= 3) res.push([i - currCount, i - 1]);
            // 重置状态
            currCount = 1;
            lastStr = s[i];
        }
    }
    // 边界情况处理，如baaaaa
    if (currCount >= 3) res.push([s.length - currCount, s.length - 1])
    return res;
};


// 这道题目的解法比较直观，其实顺序遍历然后翻译题目意思即可
// 因为题目已经说好了是由一些连续的相同字符所构成的分组
// 首先可以遍历该序列，并记录当前分组的长度。
// 如果下一个字符与当前字符不同，或者已经枚举到字符串尾部（边界情况），就说明当前字符为当前分组的尾部。
// 每次找到当前分组的尾部时，我们判断该分组长度是否达到 3，满足的话我们就将其加入答案。
